/*
 * @Author: Author && Email
 * @Date: 2024-03-14 20:48:44
 * @LastEditors: Author && Email
 * @LastEditTime: 2024-03-17 19:41:55
 * @FilePath: \MDK-ARMd:\WorkSpace\PRJ\Washing_machine\software\Washing_machine_V1\User\bsp\bsp_io.h
 * @Description: 
 * 
 * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
 */
#ifndef _BSP_IO_H_
#define _BSP_IO_H_
#include "stm32g0xx_hal.h"

#define GPIO_WRITE					HAL_GPIO_WritePin
#define GPIO_READ					HAL_GPIO_ReadPin
#define IO_SET						GPIO_PIN_SET
#define IO_RESET					GPIO_PIN_RESET

#define OPEN						1
#define CLOSE						0

/* 电源控制引脚 */
#define IO_PWR_ON_PORT				GPIOC
#define IO_PWR_ON_PIN 				GPIO_PIN_13
#define POWER_ON()					GPIO_WRITE(IO_PWR_ON_PORT, IO_PWR_ON_PIN, IO_SET);
#define POWER_OFF()					GPIO_WRITE(IO_PWR_ON_PORT, IO_PWR_ON_PIN, IO_RESET);

/* 开机按键引脚 */
#define IO_PWR_KEY_PORT				GPIOC
#define IO_PWR_KEY_PIN 				GPIO_PIN_14
#define PWR_KEY()					(GPIO_READ(IO_PWR_KEY_PORT, IO_PWR_KEY_PIN)?0:1)

/* 运行指示灯 */
#define IO_MCU_LED_PORT				GPIOA
#define IO_MCU_LED_PIN				GPIO_PIN_1
#define MCU_LED(x)					GPIO_WRITE(IO_MCU_LED_PORT, IO_MCU_LED_PIN, x?IO_RESET:IO_SET);

/* 继电器1 进水阀 */
#define IO_RELAY1_PORT				GPIOA
#define IO_RELAY1_PIN				GPIO_PIN_12
#define INLET(x)					GPIO_WRITE(IO_RELAY1_PORT, IO_RELAY1_PIN, x?IO_RESET:IO_SET);

/* 继电器2 加热 */
#define IO_RELAY2_PORT				GPIOA
#define IO_RELAY2_PIN				GPIO_PIN_11
#define HEAT(x)						GPIO_WRITE(IO_RELAY2_PORT, IO_RELAY2_PIN, x?IO_RESET:IO_SET);

/* 蜂鸣器 */
#define IO_BEEP_PORT				GPIOB
#define IO_BEEP_PIN					GPIO_PIN_12
#define BEEP(x)						GPIO_WRITE(IO_BEEP_PORT, IO_BEEP_PIN, x?IO_SET:IO_RESET);

/* 霍尔 */
#define IO_HALL_PORT				GPIOB
#define IO_HALL_PIN 				GPIO_PIN_10
#define HALL()						(GPIO_READ(IO_HALL_PORT, IO_HALL_PIN)?0:1)

/* DS18B20 */
#define IO_DS18B20_PORT             GPIOB
#define IO_DS18B20_PIN              GPIO_PIN_11
#define IO_DS18B20_SET()            GPIO_WRITE(IO_DS18B20_PORT, IO_DS18B20_PIN, IO_SET);
#define IO_DS18B20_RESET()          GPIO_WRITE(IO_DS18B20_PORT, IO_DS18B20_PIN, IO_RESET);
#define IO_DS18B20_READ()           (GPIO_READ(IO_DS18B20_PORT, IO_DS18B20_PIN))

/* 电机使能 */
#define IO_MOTOR_EN_PORT            GPIOA
#define IO_MOTOR_EN_PIN             GPIO_PIN_3
#define IO_MOTOR_ENABLE(x)          GPIO_WRITE(IO_MOTOR_EN_PORT, IO_MOTOR_EN_PIN, x?IO_SET:IO_RESET);

/* 电机A方向控制引脚1 */
#define IO_MOTOR_AIN1_PORT          GPIOA
#define IO_MOTOR_AIN1_PIN           GPIO_PIN_6
/* 电机A方向控制引脚2 */
#define IO_MOTOR_AIN2_PORT          GPIOA
#define IO_MOTOR_AIN2_PIN           GPIO_PIN_5

/* 电机B方向控制引脚1 */
#define IO_MOTOR_BIN1_PORT          GPIOA
#define IO_MOTOR_BIN1_PIN           GPIO_PIN_7
/* 电机B方向控制引脚2 */
#define IO_MOTOR_BIN2_PORT          GPIOB
#define IO_MOTOR_BIN2_PIN           GPIO_PIN_0

/* 按键1 */
#define IO_KEY1_PORT          		GPIOB
#define IO_KEY1_PIN           		GPIO_PIN_9

/* 按键2 */
#define IO_KEY2_PORT          		GPIOB
#define IO_KEY2_PIN           		GPIO_PIN_8

/* 按键3 */
#define IO_KEY3_PORT          		GPIOB
#define IO_KEY3_PIN           		GPIO_PIN_7

/* 按键4 */
#define IO_KEY4_PORT          		GPIOB
#define IO_KEY4_PIN           		GPIO_PIN_6

/* 按键5 */
#define IO_KEY5_PORT          		GPIOB
#define IO_KEY5_PIN           		GPIO_PIN_5

/* 按键6 */
#define IO_KEY6_PORT          		GPIOB
#define IO_KEY6_PIN           		GPIO_PIN_4

#define IO_KEY_GET(x,y)				(GPIO_READ(x, y)?0:1)

#endif /* _BSP_IO_H_ */
